#include "stdafx.h"

#include "Mask.h"

const Mask isthmus_table[63] = {
    // M1
    Mask( BV( BP(0,0,0), BP(7,5,7), BP(0,0,0) ), 0, BV( BP(7,7,7), BP(0,0,0), BP(0,0,0) ), BV( BP(0,0,0), BP(0,0,0), BP(7,7,7) ) ),
    Mask( BV( BP(0,7,0), BP(0,5,0), BP(0,7,0) ), 0, BV( BP(7,0,0), BP(7,0,0), BP(7,0,0) ), BV( BP(0,0,7), BP(0,0,7), BP(0,0,7) ) ),
    Mask( BV( BP(2,2,2), BP(2,0,2), BP(2,2,2) ), 0, BV( BP(1,1,1), BP(1,1,1), BP(1,1,1) ), BV( BP(4,4,4), BP(4,4,4), BP(4,4,4) ) ),
    // M2
    Mask( BV( BP(0,7,0), BP(7,5,0), BP(0,0,0) ), 0, BV( BP(7,0,0), BP(0,0,0), BP(0,0,0) ), BV( BP(0,0,7), BP(0,0,7), BP(7,7,7) ) ),
    Mask( BV( BP(2,2,2), BP(6,4,6), BP(0,0,0) ), 0, BV( BP(4,4,4), BP(0,0,0), BP(0,0,0) ), BV( BP(1,1,1), BP(1,1,1), BP(7,7,7) ) ),
    Mask( BV( BP(0,7,0), BP(0,5,7), BP(0,0,0) ), 0, BV( BP(0,0,7), BP(0,0,0), BP(0,0,0) ), BV( BP(7,0,0), BP(7,0,0), BP(7,7,7) ) ),
    Mask( BV( BP(2,2,2), BP(3,1,3), BP(0,0,0) ), 0, BV( BP(1,1,1), BP(0,0,0), BP(0,0,0) ), BV( BP(4,4,4), BP(4,4,4), BP(7,7,7) ) ),
    Mask( BV( BP(0,0,0), BP(0,5,7), BP(0,7,0) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(0,0,7) ), BV( BP(7,7,7), BP(7,0,0), BP(7,0,0) ) ),
    Mask( BV( BP(0,0,0), BP(6,4,6), BP(2,2,2) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(4,4,4) ), BV( BP(7,7,7), BP(1,1,1), BP(1,1,1) ) ),
    Mask( BV( BP(0,0,0), BP(7,5,0), BP(0,7,0) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(7,0,0) ), BV( BP(7,7,7), BP(0,0,7), BP(0,0,7) ) ),
    Mask( BV( BP(0,0,0), BP(3,1,3), BP(2,2,2) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(1,1,1) ), BV( BP(7,7,7), BP(4,4,4), BP(4,4,4) ) ),
    Mask( BV( BP(2,6,0), BP(2,4,0), BP(2,6,0) ), 0, BV( BP(4,0,0), BP(4,0,0), BP(4,0,0) ), BV( BP(1,1,7), BP(1,1,7), BP(1,1,7) ) ),
    Mask( BV( BP(2,3,0), BP(2,1,0), BP(2,3,0) ), 0, BV( BP(1,0,0), BP(1,0,0), BP(1,0,0) ), BV( BP(4,4,7), BP(4,4,7), BP(4,4,7) ) ),
    Mask( BV( BP(0,6,2), BP(0,4,2), BP(0,6,2) ), 0, BV( BP(0,0,4), BP(0,0,4), BP(0,0,4) ), BV( BP(7,1,1), BP(7,1,1), BP(7,1,1) ) ),
    Mask( BV( BP(0,3,2), BP(0,1,2), BP(0,3,2) ), 0, BV( BP(0,0,1), BP(0,0,1), BP(0,0,1) ), BV( BP(7,4,4), BP(7,4,4), BP(7,4,4) ) ),
    // M3
    Mask( BV( BP(2,6,0), BP(6,4,0), BP(0,0,0) ), 0, BV( BP(4,0,0), BP(0,0,0), BP(0,0,0) ), BV( BP(1,1,7), BP(1,1,7), BP(7,7,7) ) ),
    Mask( BV( BP(2,3,0), BP(3,1,0), BP(0,0,0) ), 0, BV( BP(1,0,0), BP(0,0,0), BP(0,0,0) ), BV( BP(4,4,7), BP(4,4,7), BP(7,7,7) ) ),
    Mask( BV( BP(0,6,2), BP(0,4,6), BP(0,0,0) ), 0, BV( BP(0,0,4), BP(0,0,0), BP(0,0,0) ), BV( BP(7,1,1), BP(7,1,1), BP(7,7,7) ) ),
    Mask( BV( BP(0,3,2), BP(0,1,3), BP(0,0,0) ), 0, BV( BP(0,0,1), BP(0,0,0), BP(0,0,0) ), BV( BP(7,4,4), BP(7,4,4), BP(7,7,7) ) ),
    Mask( BV( BP(0,0,0), BP(0,4,6), BP(0,6,2) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(0,0,4) ), BV( BP(7,7,7), BP(7,1,1), BP(7,1,1) ) ),
    Mask( BV( BP(0,0,0), BP(0,1,3), BP(0,3,2) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(0,0,1) ), BV( BP(7,7,7), BP(7,4,4), BP(7,4,4) ) ),
    Mask( BV( BP(0,0,0), BP(6,4,0), BP(2,6,0) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(4,0,0) ), BV( BP(7,7,7), BP(1,1,7), BP(1,1,7) ) ),
    Mask( BV( BP(0,0,0), BP(3,1,0), BP(2,3,0) ), 0, BV( BP(0,0,0), BP(0,0,0), BP(1,0,0) ), BV( BP(7,7,7), BP(4,4,7), BP(4,4,7) ) ),
    // M4
    Mask( BV( BP(2,6,0), BP(3,5,7), BP(0,0,0) ), 0, BV( BP(4,0,0), BP(4,0,0), BP(7,7,7) ), BV( BP(1,1,7), BP(0,0,0), BP(0,0,0) ) ),
    Mask( BV( BP(2,3,0), BP(6,5,7), BP(0,0,0) ), 0, BV( BP(1,0,0), BP(1,0,0), BP(7,7,7) ), BV( BP(4,4,7), BP(0,0,0), BP(0,0,0) ) ),
    Mask( BV( BP(0,6,2), BP(7,5,3), BP(0,0,0) ), 0, BV( BP(0,0,4), BP(0,0,4), BP(7,7,7) ), BV( BP(7,1,1), BP(0,0,0), BP(0,0,0) ) ),
    Mask( BV( BP(0,3,2), BP(7,5,6), BP(0,0,0) ), 0, BV( BP(0,0,1), BP(0,0,1), BP(7,7,7) ), BV( BP(7,4,4), BP(0,0,0), BP(0,0,0) ) ),
    Mask( BV( BP(0,0,0), BP(7,5,3), BP(0,6,2) ), 0, BV( BP(7,7,7), BP(0,0,4), BP(0,0,4) ), BV( BP(0,0,0), BP(0,0,0), BP(7,1,1) ) ),
    Mask( BV( BP(0,0,0), BP(7,5,6), BP(0,3,2) ), 0, BV( BP(7,7,7), BP(0,0,1), BP(0,0,1) ), BV( BP(0,0,0), BP(0,0,0), BP(7,4,4) ) ),
    Mask( BV( BP(0,0,0), BP(3,5,7), BP(2,6,0) ), 0, BV( BP(7,7,7), BP(4,0,0), BP(4,0,0) ), BV( BP(0,0,0), BP(0,0,0), BP(1,1,7) ) ),
    Mask( BV( BP(0,0,0), BP(6,5,7), BP(2,3,0) ), 0, BV( BP(7,7,7), BP(1,0,0), BP(1,0,0) ), BV( BP(0,0,0), BP(0,0,0), BP(4,4,7) ) ),
    Mask( BV( BP(0,7,0), BP(6,5,0), BP(2,3,0) ), 0, BV( BP(0,0,7), BP(0,0,7), BP(4,4,7) ), BV( BP(7,0,0), BP(1,0,0), BP(1,0,0) ) ),
    Mask( BV( BP(0,7,0), BP(3,5,0), BP(2,6,0) ), 0, BV( BP(0,0,7), BP(0,0,7), BP(1,1,7) ), BV( BP(7,0,0), BP(4,0,0), BP(4,0,0) ) ),
    Mask( BV( BP(2,3,0), BP(6,5,0), BP(0,7,0) ), 0, BV( BP(4,4,7), BP(0,0,7), BP(0,0,7) ), BV( BP(1,0,0), BP(1,0,0), BP(7,0,0) ) ),
    Mask( BV( BP(2,6,0), BP(3,5,0), BP(0,7,0) ), 0, BV( BP(1,1,7), BP(0,0,7), BP(0,0,7) ), BV( BP(4,0,0), BP(4,0,0), BP(7,0,0) ) ),
    Mask( BV( BP(0,3,2), BP(0,5,6), BP(0,7,0) ), 0, BV( BP(7,4,4), BP(7,0,0), BP(7,0,0) ), BV( BP(0,0,1), BP(0,0,1), BP(0,0,7) ) ),
    Mask( BV( BP(0,6,2), BP(0,5,3), BP(0,7,0) ), 0, BV( BP(7,1,1), BP(7,0,0), BP(7,0,0) ), BV( BP(0,0,4), BP(0,0,4), BP(0,0,7) ) ),
    Mask( BV( BP(0,7,0), BP(0,5,6), BP(0,3,2) ), 0, BV( BP(7,0,0), BP(7,0,0), BP(7,4,4) ), BV( BP(0,0,7), BP(0,0,1), BP(0,0,1) ) ),
    Mask( BV( BP(0,7,0), BP(0,5,3), BP(0,6,2) ), 0, BV( BP(7,0,0), BP(7,0,0), BP(7,1,1) ), BV( BP(0,0,7), BP(0,0,4), BP(0,0,4) ) ),
    Mask( BV( BP(0,3,2), BP(3,1,2), BP(2,2,2) ), 0, BV( BP(7,4,4), BP(4,4,4), BP(4,4,4) ), BV( BP(0,0,1), BP(0,0,1), BP(1,1,1) ) ),
    Mask( BV( BP(2,2,2), BP(3,1,2), BP(0,3,2) ), 0, BV( BP(4,4,4), BP(4,4,4), BP(7,4,4) ), BV( BP(1,1,1), BP(0,0,1), BP(0,0,1) ) ),
    Mask( BV( BP(2,3,0), BP(2,1,3), BP(2,2,2) ), 0, BV( BP(4,4,7), BP(4,4,4), BP(4,4,4) ), BV( BP(1,0,0), BP(1,0,0), BP(1,1,1) ) ),
    Mask( BV( BP(2,2,2), BP(2,1,3), BP(2,3,0) ), 0, BV( BP(4,4,4), BP(4,4,4), BP(4,4,7) ), BV( BP(1,1,1), BP(1,0,0), BP(1,0,0) ) ),
    Mask( BV( BP(2,2,2), BP(6,4,2), BP(0,6,2) ), 0, BV( BP(1,1,1), BP(1,1,1), BP(7,1,1) ), BV( BP(4,4,4), BP(0,0,4), BP(0,0,4) ) ),
    Mask( BV( BP(0,6,2), BP(6,4,2), BP(2,2,2) ), 0, BV( BP(7,1,1), BP(1,1,1), BP(1,1,1) ), BV( BP(0,0,4), BP(0,0,4), BP(4,4,4) ) ),
    Mask( BV( BP(2,2,2), BP(2,4,6), BP(2,6,0) ), 0, BV( BP(1,1,1), BP(1,1,1), BP(1,1,7) ), BV( BP(4,4,4), BP(4,0,0), BP(4,0,0) ) ),
    Mask( BV( BP(2,6,0), BP(2,4,6), BP(2,2,2) ), 0, BV( BP(1,1,7), BP(1,1,1), BP(1,1,1) ), BV( BP(4,0,0), BP(4,0,0), BP(4,4,4) ) ),
    // M5
    Mask( BV( BP(2,6,0), BP(3,5,6), BP(0,3,2) ), 0, BV( BP(4,0,0), BP(4,0,0), BP(7,4,4) ), BV( BP(1,1,7), BP(0,0,1), BP(0,0,1) ) ),
    Mask( BV( BP(2,3,0), BP(6,5,3), BP(0,6,2) ), 0, BV( BP(1,0,0), BP(1,0,0), BP(7,1,1) ), BV( BP(4,4,7), BP(0,0,4), BP(0,0,4) ) ),
    Mask( BV( BP(0,6,2), BP(6,5,3), BP(2,3,0) ), 0, BV( BP(0,0,4), BP(0,0,4), BP(4,4,7) ), BV( BP(7,1,1), BP(1,0,0), BP(1,0,0) ) ),
    Mask( BV( BP(0,3,2), BP(3,5,6), BP(2,6,0) ), 0, BV( BP(0,0,1), BP(0,0,1), BP(1,1,7) ), BV( BP(7,4,4), BP(4,0,0), BP(4,0,0) ) ),
    // M6
    Mask( BV( BP(2,6,0), BP(2,5,7), BP(2,3,0) ), 0, BV( BP(4,0,0), BP(4,0,0), BP(4,4,7) ), BV( BP(1,1,7), BP(1,0,0), BP(1,0,0) ) ),
    Mask( BV( BP(2,3,0), BP(2,5,7), BP(2,6,0) ), 0, BV( BP(1,0,0), BP(1,0,0), BP(1,1,7) ), BV( BP(4,4,7), BP(4,0,0), BP(4,0,0) ) ),
    Mask( BV( BP(0,6,2), BP(3,5,3), BP(2,6,0) ), 0, BV( BP(0,0,4), BP(0,0,4), BP(1,1,7) ), BV( BP(7,1,1), BP(4,0,0), BP(4,0,0) ) ),
    Mask( BV( BP(2,6,0), BP(3,5,3), BP(0,6,2) ), 0, BV( BP(4,0,0), BP(4,0,0), BP(7,1,1) ), BV( BP(1,1,7), BP(0,0,4), BP(0,0,4) ) ),
    Mask( BV( BP(0,3,2), BP(7,5,2), BP(0,6,2) ), 0, BV( BP(0,0,1), BP(0,0,1), BP(7,1,1) ), BV( BP(7,4,4), BP(0,0,4), BP(0,0,4) ) ),
    Mask( BV( BP(0,6,2), BP(7,5,2), BP(0,3,2) ), 0, BV( BP(0,0,4), BP(0,0,4), BP(7,4,4) ), BV( BP(7,1,1), BP(0,0,1), BP(0,0,1) ) ),
    Mask( BV( BP(2,3,0), BP(6,5,6), BP(0,3,2) ), 0, BV( BP(1,0,0), BP(1,0,0), BP(7,4,4) ), BV( BP(4,4,7), BP(0,0,1), BP(0,0,1) ) ),
    Mask( BV( BP(0,3,2), BP(6,5,6), BP(2,3,0) ), 0, BV( BP(0,0,1), BP(0,0,1), BP(4,4,7) ), BV( BP(7,4,4), BP(1,0,0), BP(1,0,0) ) ),
    Mask( BV( BP(0,7,0), BP(6,5,3), BP(2,2,2) ), 0, BV( BP(0,0,7), BP(0,0,4), BP(4,4,4) ), BV( BP(7,0,0), BP(1,0,0), BP(1,1,1) ) ),
    Mask( BV( BP(0,7,0), BP(3,5,6), BP(2,2,2) ), 0, BV( BP(0,0,7), BP(0,0,1), BP(1,1,1) ), BV( BP(7,0,0), BP(4,0,0), BP(4,4,4) ) ),
    Mask( BV( BP(2,2,2), BP(3,5,6), BP(0,7,0) ), 0, BV( BP(1,1,1), BP(0,0,1), BP(0,0,7) ), BV( BP(4,4,4), BP(4,0,0), BP(7,0,0) ) ),
    Mask( BV( BP(2,2,2), BP(6,5,3), BP(0,7,0) ), 0, BV( BP(4,4,4), BP(0,0,4), BP(0,0,7) ), BV( BP(1,1,1), BP(1,0,0), BP(7,0,0) ) ),
};
